/*  This file is part of -_-.

    -_- is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    -_- is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with -_-.  If not, see <http://www.gnu.org/licenses/>.

    Copyright 2012-2013 Oliver Katz */

#ifndef __ARCH_MODULES_SHARE_SERVER_H
#define __ARCH_MODULES_SHARE_SERVER_H

#include <iostream>
#include "module.h"

extern "C"
{
	#include "../../bus/share.h"
}

//namespace sleepyface::arch::modules
namespace sleepyface
{
    namespace arch
    {
        namespace modules
        {
        	//class ShareServer: share server module
			class ShareServer : public ArchModule
			{
			public:
				const static int signalShareVariableRW = signalLimit+1; //memberof ShareServer: share a variable read/write
				const static int signalShareVariableRO = signalLimit+2; //memberof ShareServer: share a variable read only
				const static int signalRunForeground = signalLimit+3; //memberof ShareServer: run the server in the foreground
				const static int signalRunBackground = signalLimit+4; //memberof ShareServer: run the server in the background

			private:
				z_ipc_server connection;
				z_share_server server;

			public:
				ShareServer();
				virtual int signal(ModuleSignal s, Architecture &a);
			};
		}
	}
}

/// To share a variable read only, send a signalShareVariableRO signal with the variable reference as an argument. The same goes for read/write and signalShareVariableRW.

#endif
